#ifndef __SOLID_H__
#define __SOLID_H__

#include <vector>
#include "color.h"
#include "face.h"
#include "edge.h"
#include "vertex.h"

class Solid{
    public:
        Solid(unsigned int);
        Solid(unsigned int, Color);
        ~Solid();

        void addFace(Face *);
        void addEdge(Edge *);
        void addVertix(Vertex *);
        void setColor(Color);

        unsigned int getID();
        Face *getFace(int);
        Face *getLastFace();
        Edge *getEdge(int);
        Vertex *getVertix(int);
        Vertex *getLastVertix();
        Vertex *getSecondLastVertix();
        Color getColor();
        void showAllVertices();
        int sizeVertices();
        int sizeEdges();
        int sizeFaces();

        Point getBoundingBoxCenter();
        void scale(double);
        void translate(Point);

        double area();

        void select(bool);
        bool isSelected();

    private:
        unsigned int id;
        Color color;
        std::vector<Face *> faces;
        std::vector<Edge *> edges;
        std::vector<Vertex *> vertices;
        bool selected;
};

#endif
